/*
Archivo de entrada para el antlr que genera el analizador léxico.
Ficheros generadas a partir de este fichero:
  IELexer.java
  IELexerTokenTypes.java
  IELexerTokenTypes.txt
*/

header {
  package ie;
}

class IELexer extends Lexer;

options {
  k = 2;
  exportVocab = IELexer;
}

tokens {
  INTCONST;
  REALCONST;
}

//COMPOSITE :   '·'
DDOT        :   ':'                     ;
DDDOT       :   "::"                    ;
APP         :   "->"                    ;
UNIF2       :   '*'('*')+               ;
OSB         :   '['                     ;
CSB         :   ']'                     ;
ID          :   (LETTER) (LETTER | DIGIT | '_')* ;
ASIG        :   "<-"                    ;
COMMA       :   ','                     ;
DOT         :   '.'                     ;
MACRO       :   '='                     ;
NORMAL      :   ":-"                    ;
PERSISTENT  :   "#-"                    ;
ABORT       :   "><"                    ; 
PRINT       :   "<<"                    ;
INDEX       :   '@'                     ;
NOT         :   '!'                     ;
OR          :   "\\/"                   ;
AND         :   "/\\"                   ;
EQUAL       :   "=="                    ;
NOTEQUAL    :   "!="                    ; 
LESSEQUAL   :   "<="                    ;
GREATEQUAL  :   ">="                    ;
LESS        :   '<'                     ;
GREAT       :   '>'                     ;
MUL         :   '*'                     ;
DIV         :   '/'                     ;
REST        :   '%'                     ;
PLUS        :   '+'                     ;
MINUS       :   '-'                     ;
PLUSPLUS    :   "++"                    ;
MINUSMINUS  :   "--"                    ;
SHARP       :   '#'                     ;
OP          :   '('                     ;
CP          :   ')'                     ;
OCURLY      :   '{'                     ;
CCURLY      :   '}'                     ;
STRING      :   '"' (~('"'))* '"'       ;
//FIELD       :   '.' (DIGIT)+            ;
CONST       :   ((DIGIT)+ '.' (DIGIT)) => ((DIGIT)+ '.' (DIGIT)+) { $setType(REALCONST);  }
                      |   (DIGIT)+                                  { $setType(INTCONST);   } ;

protected LETTER      :   'a'..'z' | 'A'..'Z' ;
protected DIGIT       :   '0'..'9';

COMMENT     :   ';' (~('\n'))* { $setType(Token.SKIP); } ;
WHITESPACE  :   ( ' '
                          | '\t'
                          | '\f'
                          | ( '\n'
                            | '\r'
                            | "\r\n"
                            )           { newline(); }
                          )             { $setType(Token.SKIP); }
                      ;

